﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using AcadPosApp.Utilidades;
using AcadPos.Entity;
using System.Data;

namespace AcadPosApp.Cadastros
{
    public partial class CadastroFeriado : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                carregarEstados();
            }
        }

        private void carregarEstados()
        {
            ddlEstado.DataSource = ddlEstadoPesq.DataSource = ControlClass.CNEstado.listaTodosEstados();
            ddlEstado.DataTextField = ddlEstadoPesq.DataTextField = "ESTADO";
            ddlEstado.DataValueField = ddlEstadoPesq.DataValueField = "ID_ESTADO";
            ddlEstadoPesq.DataBind();
            ddlEstado.DataBind();
            ddlEstadoPesq.Items.Insert(0, "Selecione");
            ddlEstado.Items.Insert(0, "Selecione");
        }

        public void carregarCidades(DropDownList ddl, string pEstado)
        {
            ddl.DataValueField = "ID_CIDADE";
            ddl.DataTextField = "NOME_CIDADE";
            ddl.DataSource = ControlClass.CNCidade.listarCidadesXEstado(pEstado, "");
            ddl.DataBind();
        }

        protected void btnConsultar_Click(object sender, EventArgs e)
        {
            ViewState["consultou"] = "S";
            carregarFeriados();
        }

        private void carregarFeriados()
        {
            DateTime pDataIni = DateTime.Now;
            DateTime pDataFim = DateTime.Now;
            int pIdCidade = 0;
            if (TxtDataInicio.Text != string.Empty)
                pDataIni = Convert.ToDateTime(TxtDataInicio.Text);
            if (TxtDataFim.Text != string.Empty)
                pDataFim = Convert.ToDateTime(TxtDataFim.Text);
            if (ddlCidadePesq.SelectedIndex >= 0)
                pIdCidade = Convert.ToInt32(ddlCidadePesq.SelectedValue);
            gvwFeriados.DataSource = ControlClass.CNFeriado.getFeriados(pDataIni, pDataFim, pIdCidade);
            gvwFeriados.DataBind();
        }

        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            pnlEdicao.Visible = false;
            pnlDados.Enabled = true;
        }

        protected void btnIncluir_Click(object sender, EventArgs e)
        {
            pnlDados.Enabled = false;
            pnlEdicao.Visible = true;
            btnConfirmar.CommandName = "Incluir";
            TrustX.Util.UtilForm.LimparCampos(pnlEdicao);
            if (ViewState["consultou"] != null)
            {
                if (ViewState["consultou"].ToString() == "S")
                {
                    ddlEstado.SelectedValue = ddlEstadoPesq.SelectedValue;
                    carregarCidades(ddlCidade, ddlEstado.SelectedItem.Text);
                    ddlCidade.SelectedValue = ddlCidadePesq.SelectedValue;
                }
            }
            else carregarEstados();
        }

        protected void ddlEstadoPesq_SelectedIndexChanged(object sender, EventArgs e)
        {
            carregarCidades(ddlCidadePesq, ddlEstadoPesq.SelectedItem.Text);
        }

        protected void btnConfirmar_Click(object sender, EventArgs e)
        {
            try
            {
                Feriado feriado = new Feriado();
                feriado.Data = Convert.ToDateTime(TxtData.Text);
                feriado.Descricao = TxtDescricao.Text;
                feriado.IdCidade = Convert.ToInt32(ddlCidade.SelectedValue);
                string usuario = User.Identity.Name;

                if (btnConfirmar.CommandName == "Incluir")
                {
                    if (ControlClass.CNFeriado.incluirFeriado(feriado, usuario))
                    {
                        ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.SucessoInserir, "")), true);
                        carregarFeriados();
                        pnlEdicao.Visible = false;
                        pnlDados.Enabled = true;
                    }
                    else
                    {
                        ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.ErroSimples, "")), true);
                    }
                }
            }
            catch (Exception ex)
            {
                if (ex.Message.ToString().Contains("'IX_TB_FERIADO"))
                    ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", "Feriado já cadastrado anteriormente. Favor verifique!"), true);
                else
                    ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.Erro, "")), true);
            }
        }

        protected void gvwFeriados_RowCreated(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                ImageButton button = (ImageButton)e.Row.FindControl("ImgExcluir");
                button.CommandArgument = e.Row.RowIndex.ToString();
            }
        }

        protected void gvwFeriados_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            gvwFeriados.PageIndex = e.NewPageIndex;
            carregarFeriados();
        }

        protected void gvwFeriados_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            try
            {
                Feriado feriado = new Feriado();
                int index = int.Parse((String)e.CommandArgument);
                feriado.IdFeriado = Convert.ToInt32(gvwFeriados.DataKeys[index]["ID_FERIADO"].ToString());
                string usuario = User.Identity.Name;

                if (e.CommandName == "Excluir")
                {
                    DataTable dadosFeriado = ControlClass.CNFeriado.getDadosFeriado(feriado.IdFeriado, feriado.IdCidade);
                    feriado.IdFeriado = Convert.ToInt32(dadosFeriado.Rows[0]["ID_FERIADO"].ToString());
                    feriado.IdCidade = Convert.ToInt32(dadosFeriado.Rows[0]["ID_CIDADE"].ToString());
                    feriado.Descricao = HttpUtility.HtmlDecode(dadosFeriado.Rows[0]["DESCRICAO"].ToString());
                    feriado.Data = Convert.ToDateTime(dadosFeriado.Rows[0]["DATA"].ToString());

                    if (ControlClass.CNFeriado.excluirFeriado(feriado, usuario))
                    {
                        ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.SucessoExcluir, "")), true);
                        carregarFeriados();
                        pnlEdicao.Visible = false;
                        pnlDados.Enabled = true;
                    }
                    else
                    {
                        ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.ErroSimples, "")), true);
                    }
                }
            }
            catch (Exception ex)
            {
                if (ex.Message.Contains("FK"))
                    ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", "Esse registro não pode ser excluído, pois já existem cadastros que dependem do mesmo!"), true);
                else
                    ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.Erro, "")), true);
                pnlEdicao.Visible = false;
                pnlDados.Enabled = true;
            }
        }

        protected void ddlEstado_SelectedIndexChanged(object sender, EventArgs e)
        {
            carregarCidades(ddlCidade, ddlEstado.SelectedItem.Text);
        }

        protected void gvwFeriados_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                // Passando por todas as linhas
                foreach (DataControlFieldCell cell in e.Row.Cells)
                {
                    // Verificando todas as colunas da linha
                    foreach (Control control in cell.Controls)
                    {
                        //No caso o botão é do tipo Imagem Button
                        ImageButton button = control as ImageButton;
                        if (button != null && button.CommandName == "Excluir")
                        {
                            // Adicionando a mensagem javascript
                            button.OnClientClick = "return ShowConfirm('Tem certeza que deseja excluir?', '" + button.ClientID + "');";
                        }
                    }
                }
            }
        }
    }
}